package com.jt.provider.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.jt.provider.service.ResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@RestController
@RequestMapping("/provider")
public class ProviderSentinelController {

    @GetMapping("/sentinel01")
    public String doSentinel01(){
        return "sentinel test 01";
    }
    @GetMapping("/sentinel02")
    public String doSentinel02(){
        return "sentinel 02 test  ...";
    }

    @Autowired
    private ResourceService resourceService;
    @GetMapping("/sentinel03")
    public String doSentinel03(){
       return resourceService.doGetResource();
       // return "sentinel 03 test";
    }

    @GetMapping("/sentinel04")
    public String doSentinel04(){
        resourceService.doGetResource();
        return "sentinel 04 test";
    }

    /**
     * 要是降级(熔断)操作,通过如下代码创造降级的条件:
     * 1)
     */
    private AtomicLong atomicLong=new AtomicLong(1);
    @GetMapping("/sentinel05")
    public String doSentinel05()throws InterruptedException{
        long count = atomicLong.getAndIncrement();
        if(count%2==0){//模拟50%的慢调用比例
            Thread.sleep(200);//模拟耗时(让线程休眠)
           //throw new RuntimeException("服务调用失败!!");
        }
        return "sentinel  test 05";
    }

    @GetMapping("/sentinel06")
  //  @SentinelResource("resource")
    public String doSentinel06(@RequestParam("id") Integer id){
        return resourceService.doGetResource(id);
       // return "Get Resource By "+id;
    }
}
